/**
 * KPI 指标 Mock 数据生成器
 * 用于生成方案比对页面的各类 KPI 指标数据
 */

/**
 * 生成基础 KPI 指标数据
 * @returns {Object} 包含所有 KPI 指标的对象
 */
export const generateKPIData = () => {
  return {
    // ========== 计划指标（所有数字类型指标） ==========
    
    // 计划完成周期（天）- 从计划开始到完成所需的总天数
    planCycle: Math.floor(Math.random() * 30) + 10, // 10-40天
    
    // 计划总工时（小时）- 完成当前计划所需的总工时
    planTotalHours: Math.floor(Math.random() * 1000) + 500, // 500-1500小时
    
    // 计划订单数量（个）- 当前计划包含的订单总数
    planOrderCount: Math.floor(Math.random() * 50) + 20, // 20-70个
    
    // 计划设备数量（台）- 参与当前计划的设备总数
    planDeviceCount: Math.floor(Math.random() * 20) + 5, // 5-25台
    
    // 匹配设备数量（台）- 满足生产要求的可用设备数
    matchedDeviceCount: Math.floor(Math.random() * 15) + 5, // 5-20台
    
    // 订单平均工时（小时/单）- 每个订单平均需要的加工工时
    orderAvgHours: Math.floor(Math.random() * 50) + 20, // 20-70小时
    
    // 平均设备产能利用率（%）- 设备实际产能占理论产能的百分比
    avgDeviceCapacityRate: Math.floor(Math.random() * 30) + 60, // 60-90%
    
    // 平均设备计划利用率（%）- 设备计划工时占可用工时的百分比
    avgDevicePlanRate: Math.floor(Math.random() * 25) + 65, // 65-90%
    
    // ========== 图表数据 ==========
    
    // 订单完成率数据 - 用于折线图展示
    orderCompletionData: generateOrderCompletionData(),
    
    // 各设备产能利用率数据 - 用于柱状图展示
    deviceCapacityData: generateDeviceUtilizationData('capacity'),
    
    // 各设备计划利用率数据 - 用于柱状图展示
    devicePlanData: generateDeviceUtilizationData('plan'),
    
    // 平均计划完成工时（小时）- 订单交付期前的平均完成工时
    avgPlanCompletionHours: Math.floor(Math.random() * 30) + 10, // 10-40小时
  }
}

/**
 * 生成订单完成率时序数据
 * @returns {Array} 订单完成率数据数组
 */
const generateOrderCompletionData = () => {
  const orderNames = ['订单001', '订单002', '订单003', '订单004', '订单005']
  const days = 30
  const data = []
  
  orderNames.forEach(orderName => {
    const values = []
    let currentRate = 0
    
    for (let i = 0; i < days; i++) {
      // 生成递增的完成率，模拟订单逐步完成的过程
      currentRate = Math.min(100, currentRate + Math.random() * 10 + 2)
      values.push({
        date: `2024-01-${String(i + 1).padStart(2, '0')}`,
        value: Math.floor(currentRate)
      })
    }
    
    data.push({
      name: orderName,
      data: values
    })
  })
  
  return data
}

/**
 * 生成设备利用率数据
 * @param {string} type - 类型：capacity（产能）或 plan（计划）
 * @returns {Array} 设备利用率数据数组
 */
const generateDeviceUtilizationData = (type) => {
  const devices = ['设备A', '设备B', '设备C', '设备D', '设备E', '设备F']
  const baseRate = type === 'capacity' ? 70 : 75 // 基础利用率
  
  return devices.map(device => ({
    name: device,
    value: Math.floor(Math.random() * 25 + baseRate) // 在基础利用率上随机波动
  }))
}

/**
 * 生成指标趋势数据（用于数字指标的趋势图）
 * @param {number} baseValue - 基准值
 * @param {number} days - 天数
 * @returns {Array} 趋势数据数组
 */
export const generateTrendData = (baseValue, days = 30) => {
  const data = []
  
  for (let i = days; i >= 0; i--) {
    const date = new Date()
    date.setDate(date.getDate() - i)
    
    // 生成围绕基准值的波动数据
    const fluctuation = (Math.random() - 0.5) * baseValue * 0.1
    data.push({
      date: date.toLocaleDateString('zh-CN', { month: '2-digit', day: '2-digit' }),
      value: Math.round(baseValue + fluctuation)
    })
  }
  
  return data
}

/**
 * 生成动画序列数据（用于首次加载的动画效果）
 * @param {number} targetValue - 目标值
 * @param {number} steps - 动画步数
 * @returns {Array} 动画序列数组
 */
export const generateAnimationSequence = (targetValue, steps = 20) => {
  const sequence = []
  
  for (let i = 0; i <= steps; i++) {
    const progress = i / steps
    // 使用缓动函数（ease-out）
    const easedProgress = 1 - Math.pow(1 - progress, 3)
    sequence.push(Math.round(targetValue * easedProgress))
  }
  
  return sequence
}

/**
 * 获取指标的状态和趋势
 * @param {string} metricType - 指标类型
 * @param {number} value - 当前值
 * @returns {Object} 包含状态、趋势、建议等信息
 */
export const getMetricStatus = (metricType, value) => {
  const thresholds = {
    planCycle: { good: 20, warning: 30 },
    planTotalHours: { good: 800, warning: 1200 },
    avgDeviceCapacityRate: { good: 80, warning: 60 },
    avgDevicePlanRate: { good: 85, warning: 65 }
  }
  
  const threshold = thresholds[metricType]
  if (!threshold) {
    return {
      status: 'normal',
      trend: 'stable',
      suggestion: ''
    }
  }
  
  let status, suggestion
  
  if (metricType === 'planCycle' || metricType === 'planTotalHours') {
    // 对于周期和工时，值越小越好
    if (value <= threshold.good) {
      status = 'excellent'
      suggestion = '指标表现优异，继续保持'
    } else if (value <= threshold.warning) {
      status = 'good'
      suggestion = '指标表现良好'
    } else {
      status = 'warning'
      suggestion = '建议优化排程算法，缩短计划周期'
    }
  } else {
    // 对于利用率，值越大越好
    if (value >= threshold.good) {
      status = 'excellent'
      suggestion = '设备利用率优秀，资源配置合理'
    } else if (value >= threshold.warning) {
      status = 'good'
      suggestion = '设备利用率良好'
    } else {
      status = 'warning'
      suggestion = '设备利用率偏低，建议优化生产安排'
    }
  }
  
  return {
    status,
    trend: Math.random() > 0.5 ? 'up' : 'down',
    trendValue: Math.floor(Math.random() * 10) + 1,
    suggestion
  }
}

/**
 * 获取 AI 分析建议
 * @param {Object} kpiData - 所有 KPI 数据
 * @returns {Array} AI 建议数组
 */
export const getAISuggestions = (kpiData) => {
  const suggestions = []
  
  // 分析计划周期
  if (kpiData.planCycle > 30) {
    suggestions.push({
      type: 'optimization',
      priority: 'high',
      icon: 'Clock',
      title: '计划周期优化建议',
      content: `当前计划周期为 ${kpiData.planCycle} 天，建议通过并行作业优化将周期缩短至 25 天以内`,
      action: '查看优化方案'
    })
  }
  
  // 分析设备利用率
  if (kpiData.avgDeviceCapacityRate < 70) {
    suggestions.push({
      type: 'efficiency',
      priority: 'medium',
      icon: 'Monitor',
      title: '设备利用率提升建议',
      content: `设备产能利用率仅为 ${kpiData.avgDeviceCapacityRate}%，存在较大提升空间`,
      action: '查看设备分析'
    })
  }
  
  // 分析订单情况
  if (kpiData.orderAvgHours > 50) {
    suggestions.push({
      type: 'balance',
      priority: 'low',
      icon: 'Tickets',
      title: '订单负载均衡建议',
      content: '部分订单工时较长，建议进行工序拆分或资源再分配',
      action: '查看订单详情'
    })
  }
  
  return suggestions
}

// 导出生成函数
export { generateOrderCompletionData, generateDeviceUtilizationData }
